package com.czm.art_light.controller;

import com.czm.art_light.constant.ApiRouterConsts;
import com.czm.art_light.constant.ArtErrorCodeEnum;
import com.czm.art_light.entity.ArtWork;
import com.czm.art_light.param.request.ArtWorkReqDto;
import com.czm.art_light.param.request.PageReqDto;
import com.czm.art_light.param.response.ArtWorkBasicInfoRespDto;
import com.czm.art_light.param.response.ArtWorkInfoRespDto;
import com.czm.art_light.param.response.PageRespDto;
import com.czm.art_light.param.response.RestResp;
import com.czm.art_light.service.ArtWorkService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 作品信息 API 控制器
 */
@Tag(name = "艺术作品管理", description = "艺术作品相关接口")
@RestController
@RequestMapping(ApiRouterConsts.WORK_API_URL_PREFIX)
public class ArtWorkController {
    @Autowired
    private ArtWorkService artWorkService;


    /**
     * 获取作品信息 根据id
     */
    @Operation(summary = "获取作品信息", description = "根据id")
    @GetMapping("/{id}")
    public RestResp<ArtWorkInfoRespDto> getArtWorkById(@PathVariable Integer id) {
        ArtWorkInfoRespDto artWorkInfoRespDto = artWorkService.getById(id);
        if (artWorkInfoRespDto != null) {
            return RestResp.ok(artWorkInfoRespDto);
        } else {
            return RestResp.fail(ArtErrorCodeEnum.ARTWORK_NOT_EXIST);
        }
    }

    /**
     * 根据艺术话题的ID或者作品类别的ID或者作品的创建者的ID或者作品所属的流派的ID 进行作品查找
     */
    @Operation(summary = "作品查找", description = "根据艺术话题的ID或者作品类别的ID或者作品的创建者的ID或者作品所属的流派的ID")
    @PostMapping("/listArtWorkByParamId")
    public RestResp<PageRespDto<ArtWorkBasicInfoRespDto>> listArtWorkByParamId(@RequestBody(required = false) ArtWorkReqDto artWorkReqDto) {
        //如果用户没有选择，或者使用了默认的Popular，则进行所有作品的分页查询
        if (artWorkReqDto == null) {
            artWorkReqDto = new ArtWorkReqDto();
        }
        return artWorkService.listArtWorkByParamId(artWorkReqDto);
    }

    /**
     * 用户推荐内容
     * 目前是 艺术作品中 点击量+分享量+下载量+喜欢量
     * 如果同一数量，则按艺术作品的id降序排列
     */
    @Operation(summary = "用户推荐内容", description = "目前是 艺术作品中 点击量+分享量+下载量+喜欢量")
    @PostMapping("/userRecommend")
    public RestResp<PageRespDto<ArtWorkBasicInfoRespDto>> userRecommend(@RequestBody PageReqDto pageReqDto) {
        return artWorkService.userRecommend(pageReqDto);
    }
}
